import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA
 * Description
 * User:user
 * Date:2021-10-15
 * Time:9:44
 */
public class TestDemo {

    //线程：jvm虚拟机栈 程序计数器 本地方法栈
    //jvm的内存被分为：java虚拟机栈 本地方法栈 程序计数器 堆 方法区
    public static void main(String[] args) {
        int[] arry = {1,2,3};
        System.out.println(arry);
        //int[] arry2 = 0;错误写法数组和整数之间不存在任何的关系
        int[] arry2 = null;//这个引用不指向任何的一个对象
        System.out.println(arry2[0]);//输出空指针异常
    }


/*
    public static void func1(int[] arry){
        //传的确实引用，但是并没有通过引用修改原来的对象内容，只是修改了当前的这个引用的指向
        arry = new int[10];
    }
    public static void func2(int[] arry){
        //修改原来数组的值，数组发生了改变
        arry[0] = 188;
    }
    public static void main(String[] args) {
        int[] arry = {11,2,3,4,15};
        func1(arry);
        System.out.println(Arrays.toString(arry));
        func2(arry);
        System.out.println(Arrays.toString(arry));
    }
*/


   /* public static void printArray(int[] arry){
        for(int i = 0; i < arry.length;i++){
            System.out.print(arry[i]  + "");
        }
    }
    public static void main(String[] args) {
        int[] arry = {11,2,3,4,15};
        printArray(arry);
    }*/

//    //类 接口 枚举 String都是引用类型
//    public static void main(String[] args) {
//        int[] arry1 = {11,12,13};
//        //局部变量存储的是一个地址
//        //引用：当前变量存储的是一个地址
//        int[] arry2 = new int[]{11,12,13};
//    }
//

    //数组在底层的内存结构
    //JVM虚拟机：java虚拟机栈 本地方法栈 堆 方法区 程序计数器
    //数组就是一个对象
    //数组一组连续的空间，存放的是一组相同数据类型的数据



/*
    public static void main(String[] args) {
        int[] arry = new int[10];
        //调用arrys.sory
        Arrays.fill(arry,99);
        Arrays.fill(arry,3,4,8);//左闭右开
        String str = Arrays.toString(arry);
        System.out.println(str);
    }
*/

/*
    public static void main3(String[] args) {
        int[] arry = {14,21,3,4,5};
        //调用arrys.sory
        Arrays.sort(arry);
        String str = Arrays.toString(arry);
        System.out.println(str);
    }*/

/*    public static void main(String[] args) {
        int[] arry = {1,2,3,4,5};

        //打印数组的三种方法
        //有关下标的使用
        for(int i = 0;i < arry.length;i++){
            System.out.print(arry[i]+" ");
        }


        System.out.println("");
        //增强for循环  数组当中每个元素的类型的变量 数组名
        for (int value : arry) {
            System.out.print(value+" ");
        }

        System.out.println(" ");
        //使用操作数组的类
        String str = Arrays.toString(arry);
        System.out.println(str);


        求数组长度
        System.out.println(arry.length);
        System.out.println(arry[0]);
        System.out.println(arry[1]);
        arry[0] = 999;
        System.out.println(arry[0]);
        //System.out.println(arry[6]);数组下标越界问题
        //System.out.println(arry[-1]);数组下标越界问题*//*
    }*/
    public static void main1(String[] args) {
        //静态初始化
        int[] num = {1,2,3,4,5,6};
        double[] arry2 = {1.1,1.2};
        //动态初始化
        int[] arry3 = new int[10];
        int[] arry4 = new int[]{1,2,3};
        //int[] arry5 = new int[3]{1,2,3};错误写法
    }







/*
    //pos1起始位置  pos2中转位置 pos3目的位置
    public  static void hanio(int n,char pos1,char pos2,char pos3){
        if(n == 1){
            move(pos1, pos3);
        }else{
            hanio(n -1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanio(n -1,pos2,pos1,pos3);
        }
    }
    public static  void move(char pos1,char pos2){
        System.out.print(pos1+"->"+pos2+" ");
    }
    public static void main(String[] args) {
        hanio(1,'A','B','C');
        System.out.println("");
        hanio(2,'A','B','C');
        System.out.println("");
        hanio(3,'A','B','C');
    }

    //汉诺塔问题 2^n - 1次移动
    //三步走战略，第一步将n-1盘子借助c移动到b
    //第二步将第n个盘子移动到c盘
    //第三步将第n-1个盘子移动到c盘
*/



  /*  public static int fib(int n){
        int a = 1;
        int b = 1;
        int c = 1;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b ;
            b = c;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(fib(1));
    }
*/


/*    public static int fib(int n){
        if(n ==  1|| n == 2){
            return 1;
        }
        int a = 1;
        int b = 1;
        int c = 0;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b ;
            b = c;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(8);
    }*/




    //迭代/循环
    //递归
  /*  public static int count = 0;
    public static  int  fib(int n){
        if(n <= 0){
            return 0;
        }
        if(n == 1 || n == 2){
            count++;
            return 1;
        }
        return fib(n - 1) + fib( n - 2);
    }
    public static void main(String[] args) {
        System.out.println(fib(40));
        System.out.println(count);
    }*/






 /* //输入数字求每位数字的和
    public static int sum(int n){
        if(n <= 9){
            return n;
        }
        return n % 10 + sum(n / 10);
    }

    public static void main(String[] args) {

        System.out.println(sum(1729));
    }*/




   /* //递归求解1+2+。。+10
    public static int func(int n){
        if(n == 1){
            return 1;
        }
        return n + func(n - 1);
    }
    public static void main(String[] args) {
        System.out.println(func(10));
    }*/

/*    输出数字的每一位数
    public static void func(int n){
        if(n <= 9){
            System.out.println(n % 10);
        }else{
            func(n/ 10);
            System.out.println(n % 10);
        }
    }

    public static void main(String[] args) {
        func(1356);

    }*/


/*    正序输出数字的每一位数
    public static void func(int n){
        if(n > 9){
            func(n / 10);
        }
            System.out.println(n % 10);

    }
    public static void main(String[] args) {
        func(123400);
    }*/


   /* //写代码横向思考就好不要进行纵向执行代码
    public static  int fac(int n){
        if(n == 1){
            return 1;
        }
        return n * fac(n - 1);
    }
    public static void main(String[] args) {
        System.out.println( fac(5));
    }
*/


    //递归：函数自己调用自己，有一个趋近于中止的条件
    //递推公式：拿到的递推公式可以很好的写出一个合格的代码
    //求n的阶乘
  /*  public static void func(int i){
        if(i == 1){
            return;
        }
        func(i - 1);
    }
    public static void main(String[] args) {
        func(2);
    }
*/


/*
    public static int fib(int n){
        int a = 1;
        int b = 1;
        int c = 1;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(fib(8));
    }
*/

     /*public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        int a = 1;
        int b = 1;
        int c = 0;
        for (int i = 3; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(fib(5));
    }*/

 /*   public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        int a = 1;
        int b = 1;
        int c = 1;
        for (int i = 3; i <= n; i++) {
            a = b;
            b = c;
            c = a + b;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(fib(5));
    }*/
 /*   public static int Fic(int n){
        if(n == 1){
            return 1;
        }
        if(n == 2){
            return 1;
        }
        return Fic(n - 1 ) + Fic(n - 2);
    }
    public static void main(String[] args) {
        System.out.println(Fic(8));
    }
*/

   /* public static int fun(int n){
        if(n < 9){
            return n;
        }
        return fun(n / 10) + n % 10;
        //return n % 10 + fun(n / 10);
    }
    public static void main(String[] args) {
        System.out.println(fun(1729));

    }*/


  /*  public static int sum(int n){
        if(n > 1){
            return n + sum(n -1);
        }else{
            return 1;
        }
    }
    public static void main(String[] args) {
        int ret = sum(10);
        System.out.println(ret);
    }*/

/*
  很关键的一段问题
  public static void print(int n ){
      if(n <= 9 ){
          System.out.println(n % 10);
      }else{
          print(n / 10);
          System.out.println(n % 10);
      }
  }
    public static void main(String[] args) {
      print(123);

    }*/



 /*   public static void print(int n) {
        if(n  > 9){
            print(n / 10);
        }
        System.out.println(n % 10);

    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int n = scan.nextInt();
            print(n);
        }

    }*/
}
